home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / idlelib / FileList.py < prev    next >
Text File  |  2005-10-18  |  4KB  |  125 lines

  1. import os
  2. from Tkinter import *
  3. import tkMessageBox
  4.  
  5.  
  6. class FileList:
  7.  
  8.     from EditorWindow import EditorWindow  # class variable, may be overridden
  9.                                            # e.g. by PyShellFileList
  10.  
  11.     def __init__(self, root):
  12.         self.root = root
  13.         self.dict = {}
  14.         self.inversedict = {}
  15.         self.vars = {} # For EditorWindow.getrawvar (shared Tcl variables)
  16.  
  17.     def open(self, filename, action=None):
  18.         assert filename
  19.         filename = self.canonize(filename)
  20.         if os.path.isdir(filename):
  21.             # This can happen when bad filename is passed on command line:
  22.             tkMessageBox.showerror(
  23.                 "File Error",
  24.                 "%r is a directory." % (filename,),
  25.                 master=self.root)
  26.             return None
  27.         key = os.path.normcase(filename)
  28.         if self.dict.has_key(key):
  29.             edit = self.dict[key]
  30.             edit.top.wakeup()
  31.             return edit
  32.         if action:
  33.             # Don't create window, perform 'action', e.g. open in same window
  34.             return action(filename)
  35.         else:
  36.             return self.EditorWindow(self, filename, key)
  37.  
  38.     def gotofileline(self, filename, lineno=None):
  39.         edit = self.open(filename)
  40.         if edit is not None and lineno is not None:
  41.             edit.gotoline(lineno)
  42.  
  43.     def new(self, filename=None):
  44.         return self.EditorWindow(self, filename)
  45.  
  46.     def close_all_callback(self, event):
  47.         for edit in self.inversedict.keys():
  48.             reply = edit.close()
  49.             if reply == "cancel":
  50.                 break
  51.         return "break"
  52.  
  53.     def close_edit(self, edit):
  54.         try:
  55.             key = self.inversedict[edit]
  56.         except KeyError:
  57.             print "Don't know this EditorWindow object.  (close)"
  58.             return
  59.         if key:
  60.             del self.dict[key]
  61.         del self.inversedict[edit]
  62.         if not self.inversedict:
  63.             self.root.quit()
  64.  
  65.     def filename_changed_edit(self, edit):
  66.         edit.saved_change_hook()
  67.         try:
  68.             key = self.inversedict[edit]
  69.         except KeyError:
  70.             print "Don't know this EditorWindow object.  (rename)"
  71.             return
  72.         filename = edit.io.filename
  73.         if not filename:
  74.             if key:
  75.                 del self.dict[key]
  76.             self.inversedict[edit] = None
  77.             return
  78.         filename = self.canonize(filename)
  79.         newkey = os.path.normcase(filename)
  80.         if newkey == key:
  81.             return
  82.         if self.dict.has_key(newkey):
  83.             conflict = self.dict[newkey]
  84.             self.inversedict[conflict] = None
  85.             tkMessageBox.showerror(
  86.                 "Name Conflict",
  87.                 "You now have multiple edit windows open for %r" % (filename,),
  88.                 master=self.root)
  89.         self.dict[newkey] = edit
  90.         self.inversedict[edit] = newkey
  91.         if key:
  92.             try:
  93.                 del self.dict[key]
  94.             except KeyError:
  95.                 pass
  96.  
  97.     def canonize(self, filename):
  98.         if not os.path.isabs(filename):
  99.             try:
  100.                 pwd = os.getcwd()
  101.             except os.error:
  102.                 pass
  103.             else:
  104.                 filename = os.path.join(pwd, filename)
  105.         return os.path.normpath(filename)
  106.  
  107.  
  108. def _test():
  109.     from EditorWindow import fixwordbreaks
  110.     import sys
  111.     root = Tk()
  112.     fixwordbreaks(root)
  113.     root.withdraw()
  114.     flist = FileList(root)
  115.     if sys.argv[1:]:
  116.         for filename in sys.argv[1:]:
  117.             flist.open(filename)
  118.     else:
  119.         flist.new()
  120.     if flist.inversedict:
  121.         root.mainloop()
  122.  
  123. if __name__ == '__main__':
  124.     _test()
  125.